package com.bnz.manager.service.impl;

import com.alibaba.fastjson.JSON;
import com.bnz.common.PageUtils;
import com.bnz.manager.entity.SpecificationEntity;
import com.bnz.manager.entity.SpecificationOptionEntity;
import com.bnz.manager.service.SpecificationOptionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bnz.common.Query;


import com.bnz.manager.dao.TypeTemplateDao;
import com.bnz.manager.entity.TypeTemplateEntity;
import com.bnz.manager.service.TypeTemplateService;


@Service("typeTemplateService")
public class TypeTemplateServiceImpl extends ServiceImpl<TypeTemplateDao, TypeTemplateEntity> implements TypeTemplateService {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private SpecificationOptionService optionService;
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<TypeTemplateEntity> page = this.page(
                new Query<TypeTemplateEntity>().getPage(params),
                new QueryWrapper<TypeTemplateEntity>()
        );

        return new PageUtils(page);
    }
    // 根据模板id将品牌列表和规格列表放到redis中
    @Override
    public List<TypeTemplateEntity> findAll() {
        // 1. 得到所有的模板
        List<TypeTemplateEntity> list = this.list();
        // 2. 遍历所有模板，将品牌和规格列表放到redis中
        for (TypeTemplateEntity entity : list) {
            // 2.1 以模板id为key，以品牌列表为值将数据放到redis中
            redisTemplate.boundHashOps("brandList").put(entity.getId(),entity.getBrandIds());
            // 2.2 得到规格选项列表
            String specIds = entity.getSpecIds();
            // 2.3 将规格选项列表转换为对象存放到map中
            List<Map> maps = JSON.parseArray(specIds,Map.class);
            // 2.4 遍历maps集合，将规格对应的规格选项放入到maps集合中
            for (Map map : maps) {
                // 2.4.1 先得到规格对应的id
                String id = map.get("id").toString();
                // 2.4.2 根据id找到对应的规格选项列表
                List<SpecificationOptionEntity> options = optionService.list(new QueryWrapper<SpecificationOptionEntity>().eq("spec_id", id));
                // 2.4.3 将得到的规格选项列表放到map中
                map.put("options",options);
            }
            // 2.5 以模板id为key，以规格和规格选项列表为值将数据放到redis中
            redisTemplate.boundHashOps("specList").put(entity.getId(),JSON.toJSONString(maps));
        }
        return list;
    }

}